/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package co.edu.senaclem.sael.vista;

import co.edu.senaclem.aspera.vista.*;
import co.edu.senaclem.logica.FichaLogicaLocal;
import co.edu.senaclem.logica.InstructorLogicaLocal;
import co.edu.senaclem.logica.LideresLogicaLocal;
import co.edu.senaclem.logica.UsuariosLogicaLocal;
import co.edu.senaclem.modelo.FichaTitulacion;
import co.edu.senaclem.modelo.Instructor;
import co.edu.senaclem.modelo.LideresFicha;
import co.edu.senaclem.modelo.Seguimiento;
import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import org.primefaces.component.commandbutton.CommandButton;
import org.primefaces.component.inputtext.InputText;
import org.primefaces.component.inputtextarea.InputTextarea;
import org.primefaces.event.SelectEvent;

/**
 *
 * @author DILOVE
 */
@ManagedBean(name = "lideresVista")
@RequestScoped
public class LideresVista {

    @EJB
    private LideresLogicaLocal lideresLogica;

    @EJB
    private FichaLogicaLocal fichaLogica;

    @EJB
    private UsuariosLogicaLocal usuariosLogica;
    
    @EJB
    private InstructorLogicaLocal instructorLogica;

    private InputText txtDocumento;
    private InputText txtNombre;
    private InputText txtApellido;
    private InputText txtFicha;
    private InputText txtJornada;
    private InputTextarea txtPrograma;
    private CommandButton btnRegistrar;
    private CommandButton btnModificar;
    private CommandButton btnEliminar;
    private CommandButton btnLimpiar;
    private LideresFicha selectedLider;
    private List<LideresFicha> listaLideres = null;

    public void onEliminacionConfirm(ActionEvent actionEvent) {
        borrar_action();
    }

    /**
     * @return the btnRegistrar
     */
    public CommandButton getBtnRegistrar() {
        return btnRegistrar;
    }

    /**
     * @param btnRegistrar the btnRegistrar to set
     */
    public void setBtnRegistrar(CommandButton btnRegistrar) {
        this.btnRegistrar = btnRegistrar;
    }

    /**
     * @return the btnModificar
     */
    public CommandButton getBtnModificar() {
        return btnModificar;
    }

    /**
     * @param btnModificar the btnModificar to set
     */
    public void setBtnModificar(CommandButton btnModificar) {
        this.btnModificar = btnModificar;
    }

    /**
     * @return the btnEliminar
     */
    public CommandButton getBtnEliminar() {
        return btnEliminar;
    }

    /**
     * @param btnEliminar the btnEliminar to set
     */
    public void setBtnEliminar(CommandButton btnEliminar) {
        this.btnEliminar = btnEliminar;
    }

    /**
     * @return the btnLimpiar
     */
    public CommandButton getBtnLimpiar() {
        return btnLimpiar;
    }

    /**
     * @param btnLimpiar the btnLimpiar to set
     */
    public void setBtnLimpiar(CommandButton btnLimpiar) {
        this.btnLimpiar = btnLimpiar;
    }

    public void registrar_action() {
        System.out.println("Registrar Lideres");
        if (usuariosLogica.validarSesion()) {
            try {
                LideresFicha lideresFicha = new LideresFicha();
                Integer ficha = Integer.parseInt(txtFicha.getValue().toString());
                FichaTitulacion fichaS = fichaLogica.consultarPorId(ficha);
                lideresFicha.setFichaTitulacion(fichaS);
                SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
                String fecha = format.format(new Date());
                lideresFicha.setFechaasignacion(fecha);
                Instructor ins = instructorLogica.consultarPorId(Long.parseLong(txtDocumento.getValue().toString()));
                lideresFicha.setDocumentoinstructor(ins);
                lideresLogica.registrar(lideresFicha);
                FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Mensaje: ", "El Lider se Asignó con Exito!"));
            } catch (NumberFormatException nfe) {
                FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Error: ", "La Ficha y el Documento del Instructor son Obligatorios y deben estar registrados!"));
            } catch (Exception e) {
                FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Error: ", e.getMessage()));
                //System.out.println("excepcion " + e.getMessage());
            }
            setListaLideres(null);
            limpiar_action();
        } else {
            try {
                FacesContext.getCurrentInstance().getExternalContext().redirect("../SesionInvalida.xhtml");
            } catch (IOException ex) {
                Logger.getLogger(LideresVista.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }

    public void borrar_action() {
        //System.out.println("Borrar Permiso");
        if (usuariosLogica.validarSesion()) {
            try {
                try {
                    Long documentoins = Long.parseLong(txtDocumento.getValue().toString());
                    Integer ficha = Integer.parseInt(txtFicha.getValue().toString());
                    Instructor ins = instructorLogica.consultarPorId(documentoins);
                    FichaTitulacion fi = fichaLogica.consultarPorId(ficha);
                    LideresFicha lider = new LideresFicha(ins, fi, null,null);
                    lideresLogica.eliminar(lider);

                    FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Mensaje: ", "El Lider se Retiró con Exito"));
                } catch (Exception e) {
                    FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Error: ", e.getMessage()));
                }
                setListaLideres(null);
                limpiar_action();
            } catch (Exception ex) {
                Logger.getLogger(LideresVista.class.getName()).log(Level.SEVERE, null, ex);
            }
        } else {
            try {
                FacesContext.getCurrentInstance().getExternalContext().redirect("../SesionInvalida.xhtml");
            } catch (IOException ex) {
                Logger.getLogger(LideresVista.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }

    public void limpiar_action() {
        System.out.println("Limpiar");
        if (usuariosLogica.validarSesion()) {
                txtFicha.setValue("");
                txtJornada.setValue("");
                txtPrograma.setValue("");
                txtDocumento.setValue("");
                txtNombre.setValue("");
                txtApellido.setValue("");
                btnRegistrar.setDisabled(false);
                btnEliminar.setDisabled(true);
        } else {
            try {
                FacesContext.getCurrentInstance().getExternalContext().redirect("../SesionInvalida.xhtml");
            } catch (IOException ex) {
                Logger.getLogger(LideresVista.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }

     public void onRowSelect(SelectEvent event) {
        System.out.println("Seleccionar Liderrrrr !!");
        if (usuariosLogica.validarSesion()) {
            try {
                LideresFicha lideresFicha = (LideresFicha) event.getObject();
                System.out.println("Lideres ficha seleccionado "+lideresFicha.getFichaTitulacion().getFicha());
                SimpleDateFormat formato = new SimpleDateFormat("yyyy-MM-dd");
                Date fechaAsig = formato.parse(lideresFicha.getFechaasignacion());
                txtDocumento.setValue(lideresFicha.getDocumentoinstructor().getDocumento().getDocumento());
                txtNombre.setValue(lideresFicha.getDocumentoinstructor().getDocumento().getNombre());
                txtApellido.setValue(lideresFicha.getDocumentoinstructor().getDocumento().getApellido());
                txtFicha.setValue(lideresFicha.getFichaTitulacion().getFicha());
                txtJornada.setValue(lideresFicha.getFichaTitulacion().getJornada());
                txtPrograma.setValue(lideresFicha.getFichaTitulacion().getCodigoPrograma().getNombre());
                btnRegistrar.setDisabled(true);
                btnEliminar.setDisabled(false);
            } catch (ParseException ex) {
                Logger.getLogger(LideresVista.class.getName()).log(Level.SEVERE, null, ex);
            }

        } else {
            try {
                FacesContext.getCurrentInstance().getExternalContext().redirect("../SesionInvalida.xhtml");
            } catch (IOException ex) {
                Logger.getLogger(LideresFicha.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    } 
    /**
     * @return the txtFicha
     */
    public InputText getTxtFicha() {
        return txtFicha;
    }

    /**
     * @param txtFicha the txtFicha to set
     */
    public void setTxtFicha(InputText txtFicha) {
        this.txtFicha = txtFicha;
    }

    /**
     * @return the txtJornada
     */
    public InputText getTxtJornada() {
        return txtJornada;
    }

    /**
     * @param txtJornada the txtJornada to set
     */
    public void setTxtJornada(InputText txtJornada) {
        this.txtJornada = txtJornada;
    }

    /**
     * @return the txtPrograma
     */
    public InputTextarea getTxtPrograma() {
        return txtPrograma;
    }

    /**
     * @param txtPrograma the txtPrograma to set
     */
    public void setTxtPrograma(InputTextarea txtPrograma) {
        this.txtPrograma = txtPrograma;
    }

    public void txtFicha_listener() {
        System.out.println("Entro al listener de la Ficha de Lider");
        if (usuariosLogica.validarSesion()) {
            try {
                FichaTitulacion ft = null;
                Integer numeroFicha = Integer.parseInt(getTxtFicha().getValue().toString());
                ft = fichaLogica.consultarPorId(numeroFicha);
                if (ft == null) {
                    txtJornada.setValue("");
                    txtPrograma.setValue("");

                    FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_WARN, "Aviso: ", "La Ficha No Está Registrada!"));
                } else {
                    getTxtFicha().setValue(ft.getFicha());
                    txtJornada.setValue(ft.getJornada());
                    txtPrograma.setValue(ft.getCodigoPrograma().getNombre());
                }
            } catch (Exception ex) {
                Logger.getLogger(AprendizVista.class.getName()).log(Level.SEVERE, null, ex);
            }
        } else {
            try {
                FacesContext.getCurrentInstance().getExternalContext().redirect("../SesionInvalida.xhtml");
            } catch (IOException ex) {
                Logger.getLogger(CoordinadorVista.class.getName()).log(Level.SEVERE, null, ex);
            }
        }

    }
    
    public void txtDocumento_listener() {
        System.out.println("Entro al listener de la Instructor Lider");
        if (usuariosLogica.validarSesion()) {
            try {
                Instructor ins = null;
                Long documento = Long.parseLong(txtDocumento.getValue().toString());
                ins = instructorLogica.consultarPorId(documento);
                if (ins == null) {
                    txtNombre.setValue("");
                    txtApellido.setValue(ins);
                    FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_WARN, "Aviso: ", "El instructor No Está Registrado!"));
                } else {
                    txtDocumento.setValue(ins.getDocumento().getDocumento());
                    txtNombre.setValue(ins.getDocumento().getNombre());
                    txtApellido.setValue(ins.getDocumento().getApellido());
                }
            } catch (Exception ex) {
                Logger.getLogger(AprendizVista.class.getName()).log(Level.SEVERE, null, ex);
            }
        } else {
            try {
                FacesContext.getCurrentInstance().getExternalContext().redirect("../SesionInvalida.xhtml");
            } catch (IOException ex) {
                Logger.getLogger(CoordinadorVista.class.getName()).log(Level.SEVERE, null, ex);
            }
        }

    }
    /**
     * @return the txtDocumento
     */
    public InputText getTxtDocumento() {
        return txtDocumento;
    }

    /**
     * @param txtDocumento the txtDocumento to set
     */
    public void setTxtDocumento(InputText txtDocumento) {
        this.txtDocumento = txtDocumento;
    }

    /**
     * @return the txtNombre
     */
    public InputText getTxtNombre() {
        return txtNombre;
    }

    /**
     * @param txtNombre the txtNombre to set
     */
    public void setTxtNombre(InputText txtNombre) {
        this.txtNombre = txtNombre;
    }

    /**
     * @return the txtApellido
     */
    public InputText getTxtApellido() {
        return txtApellido;
    }

    /**
     * @param txtApellido the txtApellido to set
     */
    public void setTxtApellido(InputText txtApellido) {
        this.txtApellido = txtApellido;
    }

    /**
     * @return the selectedLider
     */
    public LideresFicha getSelectedLider() {
        return selectedLider;
    }

    /**
     * @param selectedLider the selectedLider to set
     */
    public void setSelectedLider(LideresFicha selectedLider) {
        this.selectedLider = selectedLider;
    }

    /**
     * @return the listaLideres
     */
    public List<LideresFicha> getListaLideres() {
        if (listaLideres == null) {
            try {
                listaLideres = lideresLogica.consultar();
            } catch (Exception ex) {
                Logger.getLogger(LideresVista.class.getName()).log(Level.SEVERE, null, ex);
                FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Error: ", ex.getMessage()));
            }
        }
        return listaLideres;
    }
    /**
     * @param listaLideres the listaLideres to set
     */
    public void setListaLideres(List<LideresFicha> listaLideres) {
        this.listaLideres = listaLideres;
    }
}
